/**
 *ZHU framework. Copyright 2007-, all rights reserved.
 *
 * $Id$
 * $Revision$
 * $Date$
 * $Author$
 */
package zhu.framework.web;

import java.util.logging.*;

import javax.faces.application.*;

import zhu.framework.service.BusinessServiceMessage.Severity;
import zhu.framework.util.*;

/**
 * @author xiaopengzhu
 * 
 */
public enum WebSeverity {

	INFO() {
		@Override
		final FacesMessage.Severity toFacesSeverity() {
			return FacesMessage.SEVERITY_INFO;
		}
	},
	/**
	 * 致命的なエラーを表す。
	 */
	FATAL() {

		@Override
		final FacesMessage.Severity toFacesSeverity() {
			return FacesMessage.SEVERITY_FATAL;
		}
	},
	/**
	 * エラーを表す。
	 */
	ERROR() {

		@Override
		final FacesMessage.Severity toFacesSeverity() {
			return FacesMessage.SEVERITY_ERROR;
		}
	};

	/**
	 * このClassのデフォルトの<code>Logger</code>取得する。
	 * 特に理由のない限り、このClass内ではこのメソッドを通じてLoggerを取得することを推奨する。
	 * 
	 * @return このClassのデフォルトの<code>Logger</code>
	 */
	static private Logger getLogger() {
		final LoggerManager manager = LoggerManager.getInstance();
		final Logger logger = manager.getLogger(WebSeverity.class);
		return logger;
	}

	static public WebSeverity valueOf(final Severity businessSeverity) {
		if (businessSeverity == null) {
			return null;
		}
		//
		final WebSeverity value;
		if (businessSeverity.equals(Severity.FATAL)) {
			value = WebSeverity.FATAL;
		} else if (businessSeverity.equals(Severity.ERROR)) {
			value = WebSeverity.ERROR;
		} else {
			final IllegalArgumentException e = new IllegalArgumentException(String.format("Unknown businessSeverity : %s", businessSeverity));
			final Logger logger = getLogger();
			logger.throwing("educom.framework.web.Severity", "valueOf", e);
			throw e;
		}
		return value;
	}

	/**
	 * <p>
	 * この列挙型の値に対応するJSFメッセージの重要度を取得する。
	 * </p>
	 * 
	 * @return 対応するJSFメッセージの重要度
	 */
	abstract FacesMessage.Severity toFacesSeverity();
}
